﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using EntitiesLayer;
using System.Drawing;
using DAL;
using DAL.Repositories;
using System.Data.SqlClient;
using System.Data;

namespace BLL
{
    public class GestorMaquinasEjercicio
    {
        public IEnumerable<Maquina> listarMaquinas() {
            try
            {
                return UnitOfWork.MaquinaRepository.GetAll();
            }
            catch (SqlException ex)
            {
                Console.WriteLine(ex.Message);
            }
            catch (ApplicationException ex)
            {
                Console.WriteLine(ex.Message);
            }
            return null;
        }


        public Maquina getInfoMaquinaById(int id)
        {
            try
            {
                return UnitOfWork.MaquinaRepository.GetById(id);
            }
            catch (SqlException ex)
            {
                Console.WriteLine(ex.Message);

            }
            catch (ApplicationException ex)
            {

                Console.WriteLine(ex.Message);

            }

            return null;
        }

        public DataSet GetTipoMaquinas()
        {
            try
            {
                return ((DAL.Repositorios.MaquinaRepository)UnitOfWork.MaquinaRepository).GetTipoMaquinas();
            }
            catch (SqlException ex)
            {
                Console.WriteLine(ex.Message);

            }
            catch (ApplicationException ex)
            {

                Console.WriteLine(ex.Message);

            }

            return null;
        }

        public DataSet GetListaMaquinas()
        {
            try
            {
                return ((DAL.Repositorios.MaquinaRepository)UnitOfWork.MaquinaRepository).GetListaMaquinas();
            }
            catch (SqlException ex)
            {
                Console.WriteLine(ex.Message);

            }
            catch (ApplicationException ex)
            {

                Console.WriteLine(ex.Message);

            }

            return null;
        }

        public int GetIdTipoMaquinaByDesc(string descripcion)
        {
            try
            {
                return ((DAL.Repositorios.MaquinaRepository)UnitOfWork.MaquinaRepository).GetIdTipoMaquinaByDesc(descripcion);
            }
            catch (SqlException ex)
            {
                Console.WriteLine(ex.Message);

            }
            catch (ApplicationException ex)
            {

                Console.WriteLine(ex.Message);

            }

            return 0;
        }

        public bool insertarMaquina(string nombreMaquina, string numeroSerie, int numeroMaquina, string indicacionesUso, int idTipoMaquina, char estado, System.Drawing.Bitmap imagen)
        {
           try
            {
                Maquina maquina = new Maquina(
                      nombreMaquina: nombreMaquina,
                      serieMaquina: numeroSerie,
                      numeroMaquina: numeroMaquina,
                      estado: estado,
                      imagen: imagen,
                      indicacionesUso: indicacionesUso,
                      idTipoMaquina: idTipoMaquina
                  );

                UnitOfWork.MaquinaRepository.Insert(maquina);
                UnitOfWork.MaquinaRepository.Save();

            }
            catch (SqlException ex)
            {
                Console.WriteLine(ex.Message);
                return false;
            }
            catch (ApplicationException ex)
            {

                Console.WriteLine(ex.Message);
                return false;
            }
           
            return true;
        }

        public bool modificarMaquina(int idMaquina, string nombreMaquina, string numeroSerie, int numeroMaquina, string indicacionesUso, int idTipoMaquina, char estado, System.Drawing.Bitmap imagen)
        {
           try
            {
                Maquina maquina = new Maquina(
                      nombreMaquina: nombreMaquina,
                      serieMaquina: numeroSerie,
                      numeroMaquina: numeroMaquina,
                      estado: estado,
                      imagen: imagen,
                      indicacionesUso: indicacionesUso,
                      idTipoMaquina: idTipoMaquina,
                      id: idMaquina
                  );

                UnitOfWork.MaquinaRepository.Update(maquina);
                UnitOfWork.MaquinaRepository.Save();
            }
            catch (SqlException ex)
            {
                Console.WriteLine(ex.Message);
                return false;
            }
            catch (ApplicationException ex)
            {

                Console.WriteLine(ex.Message);
                return false;
            }
           
            return true;
        }

        public void eliminarMaquina(int idMaquina)
        {
            UnitOfWork.MaquinaRepository.Delete(new Maquina(idMaquina));
            UnitOfWork.MaquinaRepository.Save();
        }

    }
}
